﻿<?php
header( 'Expires: Sat, 01 Jan 2000 00:00:01 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );

require("configuracion.php");
require("db.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?= $instanciaECRM ?></title>
</head>

<body>

<?php

  // Obtenemos el user y pwd
  $username = $HTTP_POST_VARS["username"];
  $password = $HTTP_POST_VARS["password"];

  // Depuramos de caracteres especiales que afectan el SQL
  $username = str_replace("'", '',$username);
  $username = str_replace(";", '',$username);
  $username = str_replace("(", '',$username);
  $username = str_replace(")", '',$username);
  $password = str_replace("'", '',$password);
  $passwordOrigen=$password;
  $fechaBaja = "";
  $sessionid = "";
  $idSysUser = 0;
  $perfil	 = 0;

	// Obtenemos los parametros de seguridad para validar la contraseña del usuario
	$maxRepeticion    = 9999;
	$diasNotificacion = 9999;
	$diasCaducidad    = 9999;
	$intentoslogin	  = 3;
	
		$queryParametros = "
					SELECT ParameterName, 
					ParameterValue
					FROM app_Parameters WITH(NOLOCK)
					WHERE (ParameterType = 'Seguridad')";
		$resParametros = mssql_query($queryParametros);
		while($rowParametros = mssql_fetch_array($resParametros)){
			extract($rowParametros);
			if($ParameterName == 'Password Caducidad'){
				$diasCaducidad = $ParameterValue;
			}
			if($ParameterName == 'Password Repeticion'){
				$maxRepeticion = $ParameterValue;
			}
			if($ParameterName == 'Password Caducidad Notificacion'){
				$diasNotificacion = $ParameterValue;
			}
			if($ParameterName == 'Intentos Login'){
				$intentoslogin = $ParameterValue;
			}
		}


  // Verificamos que el usuario y el password no lleguen vacios
  if (($username <> '') and  ($password <> '')) { 
   
   		// Genero la versión encriptada del PWD
		$password = md5($password);
		$userLength = strlen($username);
   
	   // Verificamos que el usuario exista en la tabla de usuarios, solo el usuario
	   $selectSysUser  = " SELECT id_SysUser, nombre, paterno, materno, id_SysUserPerfil, ";
	   $selectSysUser .= " id_SysUserStatus, fechaBaja, DATEDIFF(dd,GETDATE(),ISNULL(fechaBaja,'20990101')) AS validDays";
	   $selectSysUser .= " FROM app_SysUsers ";
	   $selectSysUser .= " WHERE (CONVERT(binary(255), username) = CONVERT(binary(".$userLength."), '".$username."'))";
	   $resSysUser = mssql_query($selectSysUser);
   	   $numSysUser = mssql_num_rows($resSysUser);
   
 	   // Si existe verificamos su status general
	   if ($numSysUser > 0)   {
	   
			$rowSysUser = mssql_fetch_array($resSysUser); 
			$idSysUser = $rowSysUser['id_SysUser'];
			$elStatus  = $rowSysUser['id_SysUserStatus'];  // Status del usuario
			$fechaBaja = $rowSysUser['fechaBaja'];		// Fecha de Eliminación o Baja
			$validDays = $rowSysUser['validDays'];	
			$usuario   = trim($rowSysUser['nombre']." ".$rowSysUser['paterno']." ".$rowSysUser['materno']);	
			$perfil	   = $rowSysUser['id_SysUserPerfil'];
					
				// USUARIO ELIMINADO
				// Si esta eliminado mandamos un Warning para notificarselo al usuario
				if ($elStatus == 6) {

				   // ACCESSLOG
					// Registro en la Bitacora
				   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
				   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
				   $queryLog .= " username, password, appid, appsession, accessresult ";
				   $queryLog .= " ) VALUES  ( ";
				   $queryLog .= " 0, ";
				   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
				   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'eliminado');";
				   $rsquerylog = mssql_query($queryLog);

					// Se detiene el proceso y se notifica en pantalla
				 	?>
					<form name="form4" method="post" action="notify_password.php">
						<input type="hidden" name="action" value="eliminado">
						<input type="hidden" name="username" value="<?php echo $username; ?>">
					</form>
					<script>
						document.form4.submit();
					</script>
					<?php	
					exit;
				}
	
				// USUARIO BAJA (EXPIRADO)
				// Si la fecha de baja del usuario ya llegó
			   if ($validDays < 0){

						// Si el usuario no esta bloqueado previamente...
					   if($id_SysUserStatus != 3){
							$queryBlock = "
								UPDATE app_SysUsers
								SET id_SysUserStatus = '3'
								WHERE (id_SysUser = '".$id_SysUser."')";
							mssql_query($queryBlock);
					   }
					   
				   // ACCESSLOG
					// Registro en la Bitacora
				   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
				   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
				   $queryLog .= " username, password, appid, appsession, accessresult ";
				   $queryLog .= " ) VALUES  ( ";
				   $queryLog .= " 0, ";
				   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
				   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'fechabaja');";
				   $rsquerylog = mssql_query($queryLog);

					   // Se detiene el proceso y se arroja a pantalla
					   ?>
						<form name="form3" method="post" action="notify_password.php">
							  <input type="hidden" name="action" value="baja">
	  						  <input type="hidden" name="username" value="<?php echo $username; ?>">
						</form>
						<script>
							document.form3.submit();
						</script>
						<?php		
				exit;
			   }
			   
			   // USUARIO BLOQUEADO
				// Si esta bloqueado mandamos un Warning para notificarselo al usuario
				if($elStatus == 3) {
				
				   // ACCESSLOG
					// Registro en la Bitacora
				   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
				   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
				   $queryLog .= " username, password, appid, appsession, accessresult ";
				   $queryLog .= " ) VALUES  ( ";
				   $queryLog .= " 0, ";
				   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
				   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'bloqueado');";
				   $rsquerylog = mssql_query($queryLog);
				
				  ?>
				  		<form name="form10" method="post" action="login_status.php">
							  <input type="hidden" name="action" value="bloqueado">
							  <input type="hidden" name="user" value="<?=$username?>">
							  <input type="hidden" name="pass" value="<?=$password?>">
							  <input type="hidden" name="key" value="<?=$appkey?>">
						</form>
						<script>
							document.form10.submit();
						</script>
				  
				  <?
				  exit;
				  
				}else{
	
					// Hasta aquí el usuario cumple para poder ingresar...
		
					// Checamos que el usuario y la contraseña sean validos
					$SelectPass="Select id_SysUser From app_SysUsers Where id_SysUser='".$idSysUser."' and password='".$password."';";
					$resPass=mssql_query($SelectPass);
					$numPass=mssql_num_rows($resPass);
		
					// Si el PWD no es valido
					if ($numPass == 0) {
		  
						// INTENTOS
						// Obtengo sus intentos desde su ultimo acceso valido
						$selectAttempt  = " SELECT  COUNT(id_SysUserAccessLogs) AS intentos
											FROM    app_SysUserAccessLogs WITH(NOLOCK)
											WHERE (username = '".$username."')
											AND   (id_SysUserAccessLogs > (
													SELECT  ISNULL(MAX(id_SysUserAccessLogs),0) AS id_SysUserAccessLogs
													FROM    app_SysUserAccessLogs WITH(NOLOCK)
													WHERE   (username = '".$username."') AND (id_SysUser > 0))); ";
		  
						 $resAttempt = mssql_query($selectAttempt);
						 $rowAttempt  = mssql_fetch_array($resAttempt);
						 
						 $intentos = $rowAttempt['intentos'];
						 $intentos = $intentos + 1; // Agrego el intento actual
						 						 
						 if ($idSysUser == 1 || $perfil == 1) { $intentos = 0; }  // Liberamos al ADMIN y Administradores del sistema
		 
						 // Si ha tenido tres intentos fallidos le notificamos que ha sido bloqueado
						 if ($intentos >= $intentoslogin) { 

							   // ACCESSLOG
								// Registro en la Bitacora
							   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
							   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
							   $queryLog .= " username, password, appid, appsession, accessresult ";
							   $queryLog .= " ) VALUES  ( ";
							   $queryLog .= " 0, ";
							   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
							   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'intentos');";
							   $rsquerylog = mssql_query($queryLog);
							   
								$queryBlock = "
									UPDATE app_SysUsers
									SET id_SysUserStatus = '3'
									WHERE (id_SysUser = '".$idSysUser."')";
								mssql_query($queryBlock);
								
								// Envio email notificacion
								$emailadmins = "";
								$emailbloqueados = "";
								$queryNotificacion  = " SELECT id_SysUser, email, id_SysUserPerfil ";
								$queryNotificacion .= " FROM app_SysUsers ";
								$queryNotificacion .= " WHERE (id_SysUserPerfil = 1) OR (id_SysUser = '".$idSysUser."') ";
								$queryNotificacion .= " ORDER BY id_SysUserPerfil;";
								$resNotificacion = mssql_query($queryNotificacion);
							    while ($row = mssql_fetch_object($resNotificacion)){
										if ($row->id_SysUserPerfil == 1) {
											$emailadmins .= $row->email.",";
										} else {
											$emailbloqueados .= $row->email.",";
										}										
							    }
								$emailadmins = substr($emailadmins,0, strlen($emailadmins)-1);
								$emailbloqueados = substr($emailbloqueados,0, strlen($emailbloqueados)-1);
								
									// Aviso BLOQUEADO
									$from_nombre ="Admin eCRM ".$adminNombre;
									$headers = "MIME-Version: 1.0\r\n";
									$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";	
									$headers .= "From: ".$adminEmail."\r\n";
									$to = $emailbloqueados;
									$from = $adminEmail;
									$subject = "Acceso ".$instanciaECRM." -Usuario Bloqueado";
									$html = implode('', file('emailing/sys_templates/template_userblocked.htm'));
									$html = str_replace("<#sistemaecrm>",$instanciaECRM,$html);
									$html = str_replace("<#vigencia>","NA",$html);
									$html = str_replace("<#status>",'BLOQUEADO',$html);
									$html = str_replace("<#nombre>",$usuario,$html);
									$html = str_replace("<#URLecrm>","http://crm.cacto.com/".$ecrmURLname."/",$html);
									$html = str_replace("<#accionecrm>","Usuario Bloqueado",$html);
									$html = str_replace("<#username>",$username,$html);
									$html = str_replace("<#fecha>",date('d/m/Y h:i:s A'),$html);
									$body = $html;
									mail($to, $subject, $body, $headers);
									
									// AVISO ADMINS
									$from_nombre ="Admin eCRM ".$adminNombre;
									$headers = "MIME-Version: 1.0\r\n";
									$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";	
									$headers .= "From: ".$adminEmail."\r\n";
									$to = $emailadmins;
									$from = $adminEmail;
									$subject = "Acceso ".$instanciaECRM." -Usuario Bloqueado";
									$html = implode('', file('emailing/sys_templates/template_usermanagerblocked.htm'));
									$html = str_replace("<#sistemaecrm>",$instanciaECRM,$html);
									$html = str_replace("<#vigencia>","NA",$html);
									$html = str_replace("<#status>",'BLOQUEADO',$html);
									$html = str_replace("<#nombre>",$usuario,$html);
									$html = str_replace("<#URLecrm>","http://crm.cacto.com/".$ecrmURLname."/",$html);
									$html = str_replace("<#accionecrm>","Usuario Bloqueado",$html);
									$html = str_replace("<#username>",$username,$html);
									$html = str_replace("<#fecha>",date('d/m/Y h:i:s A'),$html);
									$body = $html;
									mail($to, $subject, $body, $headers);

						 		// Se detiene el proceso y se arroja a pantalla
								 ?>
								 <form name="form12" method="post" action="login_status.php">
									  <input type="hidden" name="action" value="intentos">
									  <input type="hidden" name="user" value="<?=$username?>">
									  <input type="hidden" name="pass" value="<?=$password?>">
									  <input type="hidden" name="key" value="<?=$appkey?>">
								</form>
								<script>
									document.form12.submit();
								</script>
						  
								<?
							  exit;
						 }  // Intentos
					 
					 
				   } // Password Invalido ($numPass == 0)
  				 } // Status 3
   
   
  			// Si el usuario no existe guardamos el log y mostramos el Warning o Error de acceso 
  		}else{
		
			// Si el usuario NO EXISTE
			
			   // ACCESSLOG
				// Registro en la Bitacora
			   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
			   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
			   $queryLog .= " username, password, appid, appsession, accessresult ";
			   $queryLog .= " ) VALUES  ( ";
			   $queryLog .= " 0, ";
			   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
			   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'usernamenoencontrado');";
			   $rsquerylog = mssql_query($queryLog);
			
			?>
         
                <form name="form22" method="post" action="login_status.php">
                      <input type="hidden" name="action" value="usernamenoencontrado">
                      <input type="hidden" name="user" value="<?=$username?>">
                      <input type="hidden" name="pass" value="<?=$password?>">
                      <input type="hidden" name="key" value="<?=$appkey?>">
                </form>
                <script>
                    document.form22.submit();
                </script>
             <?
             exit();
        } // Usuario que no existe en la base
  
  
  	// Todo OK hasta aquí, el usuario paso todos los filtros de seguridad

	// Verificamos de manera definitiva la validez del USER y PWD
    $query = " SELECT
			id_SysUser, 
			fechaAltaPassword, 
			id_SysUserPerfil,  
			email,
			id_SysUserStatus,
			DATEDIFF(dd,fechaAltaPassword, GETDATE()) AS diaspwd
			FROM app_SysUsers 
			WHERE (CONVERT(binary(255), username) = CONVERT(binary(".$userLength."), '".$username."')) 
			AND password='".$password."' 
			AND (id_SysUserStatus = 1);";
    $result = mssql_query ($query);
    $cuantos = mssql_num_rows ($result);

	// Si el usuario existe...
    if ($cuantos > 0){
		
		// Obtengo los datos del usuario
		$row = mssql_fetch_object($result);
		$id_SysUser=$row->id_SysUser;
		$id_SysUserPerfil=$row->id_SysUserPerfil;
		$email=$row->email;
		$id_SysUserStatus=$row->id_SysUserStatus;
		$fechaAltaPassword = date('m/d/Y', strtotime($row->fechaAltaPassword));
		$diaspwd = $row->diaspwd;
		
		// Filtro para que el adminstrador no caduque
		if ($id_SysUser == 1) { $diaspwd = 0; }
		
		   // Si la contraseña ya paso los días permitidos de caducidad
		   if($diaspwd > $diasCaducidad){

			   // ACCESSLOG
				// Registro en la Bitacora
			   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
			   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
			   $queryLog .= " username, password, appid, appsession, accessresult ";
			   $queryLog .= " ) VALUES  ( ";
			   $queryLog .= " 0, ";
			   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
			   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'passwordcaducidad');";
			   $rsquerylog = mssql_query($queryLog);

		   		// Se detiene el proceso y se arroja a pantalla
				?>
					<form name="form2" method="post" action="notify_password.php">
					  <input type="hidden" name="action" value="expirada">
					  <input type="hidden" name="email" value="<?=$email?>">
					  <input type="hidden" name="username" value="<?php echo $username; ?>">
					</form>
					<script>
						document.form2.submit();
					</script>
				<?php		
				exit;
		   }
	   
		   // Obtengo los permisos
		   $query="SELECT id_SysSection FROM app_SysSectionsUsers WITH(NOLOCK) WHERE id_SysUser='$id_SysUser' ORDER BY id_SysSection;";
		   $result = mssql_query ($query);
		   $strPermisos="";
		   while ($row = mssql_fetch_object($result)){
			 $strPermisos.=$row->id_SysSection . ",";
		   }
		   $strPermisos = substr($strPermisos, 0, strlen($strPermisos)-1);


		// Parametro para incorporar al session
	    $app_parameters = "";
		$queryAPP  = " SELECT ParameterValue FROM app_Parameters WITH(NOLOCK) ";
		$queryAPP .= " WHERE (ParameterType = 'Seguridad') AND (ParameterName = 'Session Activa')";
		$resAPP    = mssql_query ($queryAPP);
		$rowAPP = mssql_fetch_object($resAPP);
		$app_parameters = $rowAPP->ParameterValue;


		// Obtengo el tipo de logeo que vamos a utilizar
	    $applogtype = "";
		$queryAPP  = " SELECT ParameterValue FROM app_Parameters WITH(NOLOCK) ";
		$queryAPP .= " WHERE (ParameterType = 'Seguridad') AND (ParameterName = 'Log Type')";
		$resAPP    = mssql_query ($queryAPP);
		$rowAPP = mssql_fetch_object($resAPP);
		$applogtype = $rowAPP->ParameterValue;

     
	 	// Inicio SESSION
		session_start();
       	$_SESSION[$appkey."id_SysUser"]	 	  = $id_SysUser;
       	$_SESSION[$appkey."strPermisos"]	  = $strPermisos;
       	$_SESSION[$appkey."id_SysUserPerfil"] = $id_SysUserPerfil;
	   	$_SESSION[$appkey] 					  = $appkey;//Nombre del CRM
	   	$_SESSION[$appkey."appsession"]       = md5($app_parameters.".".$appkey.".".$id_SysUser.".".date("dmYHis"));
	   	$_SESSION[$appkey."logtype"]		  = $applogtype;
		$sessionid = $_SESSION[$appkey."appsession"];
	   
	   
	   // ACCESSLOG
	    // Registro en la Bitacora
	   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
	   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
	   $queryLog .= " username, password, appid, appsession, accessresult ";
	   $queryLog .= " ) VALUES  ( ";
	   $queryLog .= " ".$id_SysUser.", ";
	   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
	   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'logged in');";
	   $rsquerylog = mssql_query($queryLog);
	   
	   // Guardamos el log en un txt
	   include("utilities/bitacora.php");
	   
	   // Alerta de caducidad próxima
	   //if(($diasValidos > 0) and ($diasValidos <= $diasNotificacion)){
	   if ($diaspwd >= $diasCaducidad-$diasNotificacion &&  $diaspwd <= $diasCaducidad) {
       		?>
       		<form name="form1" method="post" action="notify_password.php">
                  <input type="hidden" name="action" value="aviso">
 		  <input type="hidden" name="username" value="<?php echo $username; ?>">
            </form>
			<script>
				document.form1.submit();
			</script>
			<?php	
			exit;
	   }
		?>	   
		<script>window.location = 'indexHome.php';</script>
		<?	   
		exit;
		// FIN usuario existe
    }  else {

		   // ACCESSLOG
			// Registro en la Bitacora
		   $queryLog  = " INSERT INTO app_SysUserAccessLogs ( ";
		   $queryLog .= " id_SysUser, IPaddress, referer, browsertype, ";
		   $queryLog .= " username, password, appid, appsession, accessresult ";
		   $queryLog .= " ) VALUES  ( ";
		   $queryLog .= " 0, ";
		   $queryLog .= " '".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_REFERER']."','".$_SERVER['HTTP_USER_AGENT']."', ";
		   $queryLog .= " '".$username."', '".$password."', '".$appkey."','".$sessionid."', 'usuarioincorrecto');";
		   $rsquerylog = mssql_query($queryLog);
      
		?>	 
	      <form name="form11" method="post" action="login_status.php">
                  <input type="hidden" name="action" value="usuarioincorrecto">
                  <input type="hidden" name="user" value="<?=$username?>">
                  <input type="hidden" name="pass" value="<?=$password?>">
                  <input type="hidden" name="key" value="<?=$appkey?>">
            </form>
			<script>
				document.form11.submit();
			</script>
      
		<?	  
		exit;
    }
	
	
	// FIN donde el user y pwd no estan vacios
  }  else {
      	// Si el usuario ingresado no es correcto en sintaxis (vacio)
		?>	 
					<form name="form11" method="post" action="login_status.php">
						  <input type="hidden" name="action" value="usuariovacio">
						  <input type="hidden" name="user" value="<?=$username?>">
						  <input type="hidden" name="pass" value="<?=$password?>">
						  <input type="hidden" name="key" value="<?=$appkey?>">
					</form>
					<script>
						document.form11.submit();
					</script> 
			 
		<?	  exit;
  } 
  ?>
</body>
</html>
